import axios from 'axios'
import useAuthStore from '@/store/auth'
import { Message } from '@arco-design/web-vue'
import router from '@/router'

// 创建axios实例
const api = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 3000,
})

// 请求拦截器
api.interceptors.request.use((config) => {
  const authStore = useAuthStore()
  if (authStore.token) {
    config.headers.Authorization = authStore.token
  }
  return config
})

// 响应拦截器
api.interceptors.response.use(
  (response) => {
    if (response.data.code != 200) {
      Message.clear()
      Message.error({
        content: response.data.message,
      })
      return Promise.reject()
    }
    return response.data
  },
  (error) => {
    let message = ''
    if (error.message.indexOf('timeout') !== -1) {
      message = '请求超时，请您稍后重试'
    } else if (error.message.indexOf('canceled') !== -1) {
      // 请求取消
    } else if (error.response) {
      switch (error.response.status) {
        case 401:
          // 服务器退出登录
          router.replace({
            path: '/login',
            query: { redirect: router.currentRoute.value.fullPath },
          })
          // 客户端退出登录
          useAuthStore().logout()
          message = '登录已失效，请您重新登录'
          break
        case 403:
          message = '您没有访问此功能的权限'
          break
        case 404:
          message = '请求地址错误'
          break
        case 405:
          message = '请求地址错误'
          break
        case 500:
          message = '系统繁忙，请稍后再试'
          break
        case 503:
          message = '系统维护中，请稍后访问'
          break
        default:
          message = error.response.data.message || '系统繁忙，请稍后再试'
          break
      }
    } else {
      message = '网络连接失败'
    }
    if (message) {
      Message.clear()
      Message.error({
        content: message,
      })
    }
    return Promise.reject(error)
  }
)

export default api
